import requests
import csv
import pandas as pd
from datetime import datetime

# 获取上一个工作日，dateFormat yyyMMdd
def get_previous_workday_with_holidays(date=None):
    
    # 自定义节假日列表（例如2025年部分节假日）
    holidays = [
        "2025-01-01",  # 元旦
        "2025-01-29",  # 春节假期
        "2025-01-30",
        "2025-05-01"   # 劳动节
    ]

    """
    获取指定日期的上一个工作日（排除周末和自定义节假日）
    :param date: 指定日期（默认当前日期）
    :param holidays: 节假日列表（格式：YYYY-MM-DD）
    :return: 上一个工作日的日期对象
    """
    if date is None:
        date = datetime.now().date()
    
    # 转换为pandas日期格式
    date = pd.Timestamp(date)
    
    # 定义自定义工作日规则（排除周末和节假日）
    custom_bd = pd.offsets.CustomBusinessDay(holidays=holidays)
    
    # 向前推一个工作日
    previous_workday = date - custom_bd
    
    return previous_workday.date().strftime("%Y%m%d")  # 转回datetime.date格式

# 发起get请求
def get_with_headers_requests(url, headers, isJson):
    try:
        print(f"request url : {url}")
        # 发送 GET 请求并传入 headers
        response = requests.get(url, headers=headers)
        
        # 检查响应状态码
        response.raise_for_status()  # 如果状态码不是 200，会抛出异常
        
        print(f"状态码: {response.status_code}")
        print(f"响应内容:{response.text}")
        if(isJson):
          return response.json()
        else:
          return response.text
    except requests.exceptions.HTTPError as e:
        print(f"HTTP 错误: {e}")
    except requests.exceptions.RequestException as e:
        print(f"请求错误: {e}")

# 保存到csv
def save_to_csv(data, etf_code, dateTime):
    if not data:
        print("没有数据可保存到CSV")
        return
    
    # 获取当前日期，格式为年月日
    current_date = dateTime
    
    # 生成文件名：年月日-etfcode.csv
    filename = f"{current_date}-{etf_code}.csv"
    
    # 要提取的字段
    fields = ["INSTRUMENT_NAME", "QUANTITY", "INSTRUMENT_ID"]
    
    try:
        with open(filename, mode='w', newline='', encoding='utf-8') as file:
            # 创建CSV写入器
            writer = csv.DictWriter(file, fieldnames=fields)
            
            # 写入表头
            writer.writeheader()
            
            # 写入数据行
            count = 0
            for item in data:
                # 只写入需要的字段
                row = {field: item.get(field, "") for field in fields}
                writer.writerow(row)
                count += 1
            
            print(f"成功将{count}条记录写入文件: {filename}")
    
    except Exception as e:
        print(f"写入CSV文件出错: {e}")